package main

import (
	"fmt"
	"sync"
)

//func main() {
//	defer func() {
//		if err := recover(); err != nil {
//			fmt.Println(err)
//		}
//	}()
//
//	panic("oh my god!panic.")
//}


//func main() {
//	defer func() {
//		if err := recover();err != nil {
//			fmt.Println(err)
//		}
//	}()
//
//	defer func() {
//		panic("oh my god! panic.")
//	}()
//
//	panic("something panic!")
//}


//func main() {
//	defer func() {
//		fmt.Println("defer recover",recover())
//	}()
//
//	defer recover()
//
//	defer fmt.Println(recover())
//
//	defer func() {
//		func(){
//			fmt.Println("defer inner")
//			recover()
//		}()
//	}()
//
//	panic("panic error")
//}


//func main() {
//	test()
//}

func test() {
	var i int
	func() {
		defer func(){
			if err := recover();err != nil {
				i = 2
			}
		}()
		panic("something panic!")
		i += 8
		fmt.Println("no panic, i is:",i)
	}()
	fmt.Println("i is:",i)
}


func main() {
	var wg sync.WaitGroup
	wg.Add(4)
	go func() {
		defer wg.Done()
		defer func() {
			if err := recover();err != nil {
				fmt.Println("panic recover",err)
			}
		}()
		var info map[string]string
		info["name"] = "BGBiao"
		fmt.Println(info)
	}()
	wg.Wait()
	fmt.Println("done")
}